let and const (ES6)

const

全名為 constant ( 常數 ),相對於 var ( 變數 ),需要一開始即指定一初始值給 const,且不能在後續的步驟修改 const 的值。

  • 需先指定一初始值,否則會出現錯誤 Missing initializer in const declaration

    1
    2
    const b
    b = 20 // Error: `Missing initializer in const declaration`

  • 不能在後續修改 const 的值,否則出現錯誤 Assignment to constant variable

    1
    2
    const b = 10
    b = 20 // Error: `Assignment to constant variable`

  • let 以及 var 則無此限制

應用

  • example 01 :

    1
    2
    3
    4
    5
    const obj = {
    number: 1
    }

    obj.number = 2

    此時當執行 obj.number 時,程式會去修改其中 obj 所儲存的記憶體位置中的 number 的值,而不會去修改到記憶體位置,因此不會出錯,可想像成

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    0x01: {
    number: 2
    } // 其中的 number 的值修改成 2

    obj:0x01

    const obj = {
    number: 1
    }

    obj.number = 2

  • example 02 :

    1
    2
    3
    4
    5
    6
    7
    const obj = {
    number: 1
    }

    obj = {
    number: 2
    }

    這時已產生一個新的記憶體位置來放 number: 2 的值,之後再將這新的記憶體位置只給 obj 但此時已修改到 const obj 的值了,因此會發生錯誤。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    0x01: {
    number: 2
    }

    0x02: {
    number: 2
    }

    obj:0x02 // obj 的值 ( 也就是儲存的記憶體位置 ) 被修改了

    const obj = {
    number: 1
    }

    obj = {
    number: 2
    } // Error: `Assignment to constant variable`

Hoisting - 從 ECMAScript 下手 JavaScript 變數的資料型態

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×